﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AGVController.AgvModel
{
    /// <summary>
    /// 查询机器人当前的导航状态的响应
    /// </summary>
    public class robot_status_task_res : robot_base_res
    {

        /// <summary>
        /// 0 = NONE, 1 = WAITING(目前不可能出现该状态), 2 = RUNNING, 3 = SUSPENDED, 4= COMPLETED, 5 = FAILED, 6 =CANCELED
        /// </summary>
        public int task_status { get; set; }
        /// <summary>
        /// 导航类型, 0 = 没有导航, 1 = 自由导航到任意点, 2 = 自由导航到站点, 3 = 路径导航到站点, 7 = 平动转动, 100 = 其他
        /// </summary>
        public int task_type { get; set; }
        /// <summary>
        /// 当前导航要去的站点, 仅当 task_type 为 2或 3 时该字段有效, task_status 为RUNNING 时说明正在去这个站点,task_status 为 COMPLETED 时说明已经到达这个站点, task_status 为 FAILED 时说明去这个站点失败, task_status 为SUSPENDED 则说明去这个站点的导航暂停
        /// </summary>
        public string target_id { get; set; }
        /// <summary>
        /// 当前导航要去的坐标点, 为一个包含三个元素的数组, 分别为在世界坐标系中的 x, y, r 坐标, 仅当 task_type 为 1 时该字段有效,task_status 为 RUNNING 时说明正在去这个坐标点, task_status 为 COMPLETED 时说明已经到达这个坐标点, task_status 为FAILED 时说明去这个坐标点失败,task_status 为 SUSPENDED 则说明去这个坐标点的导航暂停
        /// </summary>
        public List<double> target_point { get; set; }
        /// <summary>
        /// 当前导航路径上已经经过的站点, 为站点的数组, 仅当 task_type 为 3 时该字段有效点。这里会列出所有已经经过的中间点
        /// </summary>
        public List<string> finished_path { get; set; }
        /// <summary>
        /// 当前导航路径上尚未经过的站点, 为站点的数组, 仅当 task_type 为 3 时该字段有效。这里会列出所有尚未经过的中间点
        /// </summary>
        public List<string> unfinished_path { get; set; }
        /// <summary>
        /// 料箱状态（只针对料箱机器人有意义）
        /// </summary>
        public List<Containers> containers { get; set; }


    }

    public class Containers
    {
        /// <summary>
        /// 
        /// </summary>
        public string container_name { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string desc { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string goods_id { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public bool has_goods { get; set; }
    }
}
